﻿class ru.vega_int.firsoff.LoggerLite
{
	
	/*_________constructor__________*/
	function LoggerLite(_scene:MovieClip)
	{
		//trace('LoggerLite')
		scene = _scene;
		init();
	}	
	
	
	/*___________properties____________*/
	////////////// PRIVATE
	private static var scene:MovieClip;		// ссылка на сцену
	private static var log_mc:MovieClip;	// мувик логгера
	private static var drag_mc:MovieClip;	// мувик за который можно перетаскивать логгер
	private static var close:MovieClip;		// мувик закрытия
	private static var log:TextField;		// текстовое поле лога
	private static var title:TextField;		// текстовое поле лога
	private static var log_array:Array;		// массив со строками
	private static var __visible:Boolean;	// флаг видимости
	private static var keyListener:Object;	// слушатель клавиатуры
	private static var textFormat:TextFormat;	// текстовый формат
	private static var titleFormat:TextFormat;	// для заголовка
	private static var BGD_COLOR:Number;	// цвет фона
	private static var DRAG_HEIGHT:Number;	// высота драг мувика
	private static var CLOSE_HEIGHT:Number;	// высота драг мувика
	private static var DRAG_BGD_COLOR:Number;	// цвет фона драг мувика
	private static var CLOSE_BGD_COLOR:Number;	// цвет фона драг мувика
	private static var width:Number;		// ширина
	private static var height:Number;		// высота
	
	////////////// PUBLIC
	/*___________methods____________*/
	////////////// PRIVATE
	private static function init():Void
	{
		log_array = new Array();
		__visible = false;
		BGD_COLOR = 0xF7F7F7;
		DRAG_BGD_COLOR = 0xE6FFE8;
		DRAG_HEIGHT = 20;
		CLOSE_HEIGHT = DRAG_HEIGHT/3*2
		CLOSE_BGD_COLOR = BGD_COLOR;
		textFormat = new TextFormat();
		textFormat.align = 'left';
		textFormat.color = 0x001400;
		textFormat.font = "Courier, _sans, serif";
		textFormat.size = 12;
		
		titleFormat = new TextFormat();
		titleFormat.align = 'left';
		titleFormat.color = 0x001400;
		titleFormat.bold = true;
		titleFormat.font = " Verdana,_sans, serif";
		titleFormat.size = 10;
		create();
		initKey();
	};
	
	// настройка клавы для вызова лога
	private static function initKey():Void
	{
		Key.removeListener(keyListener);
		keyListener = new Object();
		keyListener.onKeyDown = eventHandlerDebug;
		Key.addListener(keyListener);
		function eventHandlerDebug():Void
		{
			
			if (Key.isDown(Key.CONTROL) && Key.getCode() == 53) 
			{
				if(__visible)
				{
					hide();
				}
				else
				{
					showLogWindow();
					show();
					updateLog();
				};
			}
		}
	};
	
	private static function create():Void
	{
		width = Stage.width/1.5;
		height = Stage.height/2;
		// это чтобы дебаггер работал как надо 
		log_mc.removeMovieClip();
		// отрисовываем основной мувик
		log_mc = scene.createEmptyMovieClip('logger', scene.getNextHighestDepth());
		log_mc.createTextField('log_txt', log_mc.getNextHighestDepth(), 0,0,0,0);
		hide();
		log = log_mc.log_txt;
		log.selectable = true;
		log_mc.lineStyle(1, 0x00000, 100);
		log_mc.beginFill(BGD_COLOR, 100);
		log_mc.moveTo(0, 0);
		log_mc.lineTo(width, 0);
		log_mc.lineTo(width, height);
		log_mc.lineTo(0, height);
		log_mc.lineTo(0,0);
		log_mc.endFill();
		align();
		
		// настраиваем текстовое поле
		log._width = log_mc._width;
		log._height = log_mc._height - DRAG_HEIGHT;
		log._y = DRAG_HEIGHT + 2;
		
		drag_mc.removeMovieClip();
		// создаем область для перетаскивания
		drag_mc = log_mc.createEmptyMovieClip('drag_mc', log_mc.getNextHighestDepth());
		drag_mc.area = drag_mc.createEmptyMovieClip('area', drag_mc.getNextHighestDepth());
		drag_mc.area.lineStyle(1, 0x00000, 100);
		drag_mc.area.beginFill(DRAG_BGD_COLOR, 100);
		drag_mc.area.moveTo(0, 0);
		drag_mc.area.lineTo(width, 0);
		drag_mc.area.lineTo(width, DRAG_HEIGHT);
		drag_mc.area.lineTo(0, DRAG_HEIGHT);
		drag_mc.area.lineTo(0,0);
		drag_mc.area.endFill();
		drag_mc.area.onPress = function():Void
		{
			log_mc.startDrag(false);
			this.onMouseMove = function():Void
			{
				updateAfterEvent();
			};
		};
		drag_mc.area.onRelease = drag_mc.area.onReleaseOutside = function():Void
		{
			log_mc.stopDrag();
			delete this.onMouseMove;
		};
		// текст для заголовка
		drag_mc.createTextField('title', drag_mc.getNextHighestDepth(), 0,0,drag_mc._width,drag_mc._height);
		title = drag_mc.title;
		title.selectable = false;
		title.text = "version: "+_global.version + '     last update: '+ _global.update + '      author : '+_global.author;
		
		title.setTextFormat(titleFormat);
		// создаем кнопку
		close.removeMovieClip();
		close = drag_mc.createEmptyMovieClip('close', drag_mc.getNextHighestDepth());
		close.lineStyle(1, 0x00000, 100);
		close.beginFill(CLOSE_BGD_COLOR, 100);
		close.moveTo(0, 0);
		close.lineTo(CLOSE_HEIGHT, 0);
		close.lineTo(CLOSE_HEIGHT, CLOSE_HEIGHT);
		close.lineTo(0, CLOSE_HEIGHT);
		close.lineTo(0,0);
		close.endFill();
		var thickness:Number = 3;
		close.lineStyle(thickness, 0x980101, 100);
		close.moveTo(0 + thickness, 0 + thickness);
		close.lineTo(CLOSE_HEIGHT - thickness, CLOSE_HEIGHT - thickness);
		close.moveTo(CLOSE_HEIGHT - thickness, 0 + thickness);
		close.lineTo(0 + thickness, CLOSE_HEIGHT - thickness);
		close._x = drag_mc._width - close._width - 5;
		close._y = (drag_mc._height - close._height)/2;
		
		close.onPress = function():Void
		{
			hide();
		};
		
	};
	
	private static function hide():Void
	{
		log_mc._visible = false;
		__visible = false;
	};
	
	private static function show():Void
	{
		log_mc.swapDepths(scene.getNextHighestDepth());
		create();
		align();
		log_mc._visible = true;
		__visible = true;
		updateLog();
		//addLogString('Stage.width = ' + Stage.width)
	};
	
	private static function align():Void
	{
		log_mc._x = (Stage.width - log_mc._width)/2;
		log_mc._y = (Stage.height - log_mc._height)/2;
	};
	
	private static function setLog(str:String):Void
	{
		log.text = str;
		log.setTextFormat(textFormat);
		//trace(log.text)
		//updateLog()
	};
	// вывод лога в поле TextArea
	private static function updateLog():Void
	{
		var outString:String = '---------- begin log ------------' + '\n';
		for(var i:Number = 0; i < log_array.length; i++)
		{
			outString += i + '. ' + log_array[i] + '\n';
		};
		outString += '---------- end log --------------';
		setLog(outString);
	}
	////////////// PUBLIC
	// показать лог
	public static function showLogWindow():Void
	{
		show();
	}
	// занести строку в лог
	public static function addLogString(STR:String):Void
	{
		if(log_array.length == 0 || log_array == undefined)
		{
			log_array = new Array();
		}
		if(STR != null && STR != undefined && STR != '')
		{
			log_array.push(STR);
		}
	}
	
	
}